package unq.persistencia;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

/**
 * TODO: description
 */
public class PartidoDAO extends PartidoGeneralDAO {

    public PartidoDAO() {
        this.setSessionManager(SessionManager.getInstance());
    }

    public List<Equipo> select() {
        Query q = this.getSessionManager().crearQuery("from Equipo");
        q.setCacheable(true);
        return q.list();

    }

    public void save(final List<Partido> partidos) {
        Session s = this.sessionManager.getSession();
        for (Partido partido : partidos) {
            s.saveOrUpdate(partido);
        }
    }

    public List<Partido> historialPorEquipos(final Equipo eq1, final Equipo eq2) {
        Query q = this
                .getSessionManager()
                .crearQuery(
                        "from Partido where (primerEquipo.id = :equipo1 and segundoEquipo.id = :equipo2) or (primerEquipo.id = :equipo2 and segundoEquipo.id = :equipo1)");
        q.setParameter("equipo1", eq1.getId());
        q.setParameter("equipo2", eq2.getId());
        List<Partido> qlist = q.list();
        return qlist;
    }

    public List<Object[]> empatesPorEquipos() {
        Query q = this
                .getSessionManager()
                .crearQuery(
                        "SELECT p.primerEquipo, p.segundoEquipo, count(*) as cantEmpates from Partido as p where p.ganador = null group by p.primerEquipo, p.segundoEquipo");

        List<Object[]> empates = q.list();

        return empates;
    }
}
